import { searchCore } from './search'

// bug: 会导致 for (var item in array) 时把这些函数也都循环出来

// /** 删除一个指定元素 */
// Array.prototype.remove = function (item) {
//   for (let i = this.length - 1; i >= 0; i--) {
//     if (this[i] === item) {
//       this.splice(i, 1);
//       return this;
//     }
//   }
// }
// /** 删除全部指定元素，数组中可能有重复项时使用 */
// Array.prototype.removeAll = function (item) {
//   for (let i = this.length - 1; i >= 0; i--)
//     if (this[i] === item)
//       this.splice(i, 1);
//   return this;
// }
// /** 去重 */
// Array.prototype.distinct = function () {
//   for (let i = this.length - 2; i >= 0; i--) {
//     for (let j = i + 1; j < this.length; j++) {
//       if (this[i] === this[j]) {
//         this.splice(i, 1);
//         break;
//       }
//     }
//   }
//   return this;
// }
// /** 元素字典 */
// Array.prototype.dic = function (key, value) {
//   const ret = {};
//   for (const v of this)
//     ret[key?.(v) || v] = value?.(v) || v;
//   return ret;
// }
// /** 元素分组 */
// Array.prototype.group = function (funcKey, funcValue) {
//   let group = {};
//   let key;
//   for (let value of this) {
//     key = funcKey ? funcKey(value) : value;
//     if (!group[key])
//       group[key] = [];
//     if (funcValue)
//       group[key].push(funcValue(value));
//     else
//       group[key].push(value);
//   }
//   return group;
// }
// /** 字符串搜索，得出搜索的关键字在字符串中出现的索引(忽略大小写)，可用于高亮关键字 */
// Array.prototype.search = function (keyword, funcString, onSearch) {
//   return searchCore(this, keyword, funcString, onSearch);
// }
// Array.prototype.last = function () {
//   return this[this.length - 1];
// }
// Array.prototype.count = function (func) {
//   if (!func)
//     return this.length;
//   let count = 0;
//   for (let value of this)
//     if (func(value))
//       count++;
//   return count;
// }
// Array.prototype.avg = function (func) {
//   if (this.length == 0)
//     return 0;
//   let sum = 0;
//   if (func)
//     for (let value of this)
//       sum += func(value);
//   else
//     for (let value of this)
//       sum += value;
//   return sum / this.length;
// }
// Array.prototype.sum = function (func) {
//   let sum = 0;
//   if (func)
//     for (let value of this)
//       sum += func(value);
//   else
//     for (let value of this)
//       sum += value;
//   return sum;
// }
// Array.prototype.max = function (func, e = true) {
//   // 最大值对应的对象
//   let result;
//   if (func) {
//     // 最大值
//     let rvalue;
//     let temp;
//     for (let value of this) {
//       temp = func(value);
//       if (rvalue == undefined || temp > rvalue) {
//         rvalue = temp;
//         result = value;
//       }
//     }
//     if (!e)
//       result = rvalue;
//   } else {
//     for (let value of this) {
//       if (result == undefined || value > result)
//         result = value;
//     }
//   }
//   return result;
// }
// Array.prototype.min = function (func, e = true) {
//   // 最小值对应的对象
//   let result;
//   if (func) {
//     // 最大值
//     let rvalue;
//     let temp;
//     for (let value of this) {
//       temp = func(value);
//       if (rvalue == undefined || temp < rvalue) {
//         rvalue = temp;
//         result = value;
//       }
//     }
//     if (!e)
//       result = rvalue;
//   } else {
//     for (let value of this) {
//       if (result == undefined || value < result)
//         result = value;
//     }
//   }
//   return result;
// }
// Array.prototype.same = function (func) {
//   if (this.length == 0)
//     return false;
//   else if (this.length == 1)
//     return true;
//   if (func) {
//     let e = func(this[0]);
//     for (let i = 1; i < this.length; i++)
//       if (func(this[i]) !== e)
//         return false;
//   } else {
//     let e = this[0];
//     for (let i = 1; i < this.length; i++)
//       if (this[i] !== e)
//         return false;
//   }
//   return true;
// }